/***
 * 方友app工具类
 * author : zeke
 **/
 (function(){
	var rv; //用于jstree 存在保留值

	window.YZ = window.Yz = window.yz = window.FY = window.fy = {
		/** 获取页面高度 **/
		getClientHeight : function(){
			return document.documentElement.clientHeight || document.body.clientHeight;
		},
		/** 获取页面宽度 **/
		getClientWidth : function(){
			return document.documentElement.clientWidth || document.body.clientWidth;
		},	
		/** 判断元素是否有指定class **/
		hasClass : function(ele,cls) {
	    	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
		},
		/** 给元素添加指定class **/
		addClass : function (ele,cls) {
	    	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
		},
		/** 给元素移除指定class **/
	  	removeClass : function(ele,cls) {
	   		if (hasClass(ele,cls)) {
	        	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
	        	ele.className=ele.className.replace(reg,' ');
	    	}
		},
		/** 字符串的空判断 **/
		isEmpty : function(str){
			if (!str || typeof(str) =="undefined" || str == '' || str == "" ){
	    		return true;
			}else{
				return false;
			}
		},
		/** 字符串的非空判断 **/
		isNotEmpty : function(str){
				return !this.isEmpty(str);
		},
		
		 /** 添加设置cookie **/  
		addCookie: function (name,value,minute,path){  
		    var name = escape(name);  
		    var value = escape(value);  
		    var expires = new Date();  
		    expires.setTime(expires.getTime() + minute * 60 * 1000);  //按分钟
		    //path=/，表示cookie能在整个网站下使用，path=/temp，表示cookie只能在temp目录下使用  
		    path = path == "" ? "" : ";path=" + path;  
		    //GMT(Greenwich Mean Time)是格林尼治平时，现在的标准时间，协调世界时是UTC  
		    //参数days只能是数字型  
		    var _expires = (typeof days) == "string" ? "" : ";expires=" + expires.toUTCString();  
		    document.cookie = name + "=" + value + _expires + path;  
		}, 	
		
		/** 获取cookie的值，根据cookie的键获取值 **/  
		getCookieValue: function(name){  
		    //用处理字符串的方式查找到key对应value  
		    var name = escape(name);  
		    //读cookie属性，这将返回文档的所有cookie  
		    var allcookies = document.cookie;         
		    //查找名为name的cookie的开始位置  
		    name += "=";  
		    var pos = allcookies.indexOf(name);      
		    //如果找到了具有该名字的cookie，那么提取并使用它的值  
		    if (pos != -1){                                             //如果pos值为-1则说明搜索"version="失败  
		        var start = pos + name.length;                  //cookie值开始的位置  
		        var end = allcookies.indexOf(";",start);        //从cookie值开始的位置起搜索第一个";"的位置,即cookie值结尾的位置  
		        if (end == -1) end = allcookies.length;        //如果end值为-1说明cookie列表里只有一个cookie  
		        var value = allcookies.substring(start,end); //提取cookie的值  
		        return (value);                           //对它解码        
		    }else{  //搜索失败，返回空字符串  
		        return "";  
		    }  
		},
		
		/**根据cookie的键，删除cookie，其实就是设置其失效**/  
		deleteCookie: function (name,path){   
		    var name = escape(name);  
		    var expires = new Date(0);  
		    path = path == "" ? "" : ";path=" + path;  
		    document.cookie = name + "="+ ";expires=" + expires.toUTCString() + path;  
		}, 
		
		
		/** 根据当前日期,获取指定往前的日期,默认为当前日期  **/
		getAgoDateTime: function (interval, number) {
			var date = new Date();
		    switch (interval) {
			    case "y": {
			        date.setFullYear(date.getFullYear() - number);
			        break;
			    }
			    case "q": {
			        date.setMonth(date.getMonth() - number * 3);
			        break;
			    }
			    case "M": {
			        date.setMonth(date.getMonth() - number);
			        break;
			    }
			    case "w": {
			        date.setDate(date.getDate() - number * 7);
			        break;
			    }
			    case "d": {
			        date.setDate(date.getDate() - number);
			        break;
			    }
			    case "h": {
			        date.setHours(date.getHours() - number);
			        break;
			    }
			    case "m": {
			        date.setMinutes(date.getMinutes() - number);
			        break;
			    }
			    case "s": {
			        date.setSeconds(date.getSeconds() - number);
			        break;
			    }
			    default: {
			        date.setDate(date.getDate() - number);
			        break;
			    }
		    }
		    return date;
		},
		/* 将日期格式化为短日期,YYYY-MM-DD */
		getFormatShortDate: function (date) {
		    if(FY.isEmpty(date)){
		    	return '';
		    }
		    var seperator1 = "-";
		    var seperator2 = ":";
		    var year = date.getFullYear();
		    var month = date.getMonth() + 1;
		    var strDate = date.getDate();
		    if (month >= 1 && month <= 9) {
		        month = "0" + month;
		    }
		    if (strDate >= 0 && strDate <= 9) {
		        strDate = "0" + strDate;
		    }
		    var currentdate = year + seperator1 + month + seperator1 + strDate;
		    return currentdate;
		},
		/* 将日期格式化为长日期,YYYY-MM-DD HH-mm-ss */
		getFormatLongDate: function (date) {
		    if(FY.isEmpty(date)){
		    	return '';
		    }
		    var seperator1 = "-";
		    var seperator2 = ":";
		    var year = date.getFullYear();
		    var month = date.getMonth() + 1;
		    var strDate = date.getDate();
		    if (month >= 1 && month <= 9) {
		        month = "0" + month;
		    }
		    if (strDate >= 0 && strDate <= 9) {
		        strDate = "0" + strDate;
		    }
		    var currentdate = year + seperator1 + month + seperator1 + strDate
		            + " " + date.getHours() + seperator2 + date.getMinutes()
		            + seperator2 + date.getSeconds();
		    return currentdate;
		},		
		/** 通过ID获取元素,返回一个对象  **/
		getId : function(idStr){
			return $("#"+idStr);
		},
		/** 通过ClassName获取元素,返回一个数组对象  **/
		getClassName : function(idStr){
			return $("."+idStr);
		},
		/** 通过name'如:input,select,div'获取元素,返回一个数组对象  **/
		getTagName : function(idStr){
			return $(idStr);
		},
		/** 基于layer插件封装的消息提示框  **/
		msg : function(opts){
			var time = opts.time ? opts.time : 2 * 1000; //默认1秒
			var msg = opts.msg ? opts.msg : "您好,提示您了！";
			layer.msg(msg, {
				  time: time, //不自动关闭
				  shadeClose: true,
				  shift: 0 //默认动画风格
				}
			);	
		},		
		/** 基于layer插件封装的消息提示框 
		 **/
		alert : function(opts){
			var types = ['success','error','question','hold','fail','ok','warning'];
			var idx = opts.type ? FY.getIdxInArr(types,opts.type) : 1;
			var title = opts.title ? opts.title : "消息框";
			var msg = opts.msg ? opts.msg : "提示消息内容!";
			layer.alert(msg,{icon:idx,title:title}, function(index){
			  if(opts.fn) opts.fn();
			  layer.close(index);
			});		
		},
		/** 基于layer插件封装的消息确认框  **/
		confirm : function(opts){
			if(!opts) opts = {};
			var msg = opts.msg ? opts.msg : "确定继续吗?";
			var title = opts.title ? opts.title : "确认框";		
			layer.confirm(msg, {icon: 3, title:title }, function(index){
				if(opts.succFn) opts.succFn();	
			  	layer.close(index);
			});		
		},
		/** 基于bootstrap和lobibox插件封装的进度框  **/
		progress : function(opts){
			var time = opts.time ? opts.time * 1000 :  10*1000; //默认10秒
			var msg = opts.msg ? opts.msg : "正在拼命加载...";
			layer.msg(msg, {
				icon : 16,
				shade : 0.2,
				shift :1,
				title : opts.title,
				time : time
			}, function() {
				//完成后执行的方法	
				if(opts.fn) opts.fn();
			});  
		},
		/** 基于layer插件封装的进度框  **/
		loading : function(opts){
			var time = opts.time ? opts.time * 1000 :  10*1000; //默认10秒
			var title = opts.title ? opts.title : "处理进度";
			var text = opts.text ? opts.text : "正在拼命加载...";
			var index = layer.load({time: 10*1000});
		},
		/** 获取项目根目录 **/
		getRootPath : function getRootPath(){  
		    //获取当前网址，如： http://localhost:8083/uimcardprj/share/meun.jsp  
		    var curWwwPath = window.document.location.href;  
		    //获取主机地址之后的目录，如： uimcardprj/share/meun.jsp  
		    var pathName=window.document.location.pathname;  
		    var pos=curWwwPath.indexOf(pathName);  
		    //获取主机地址，如： http://localhost:8083  
		    var localhostPath=curWwwPath.substring(0,pos); 
		   	if(localhostPath.indexOf("808") ==-1){
		   		return localhostPath+"/";
		   	}else{
		   	   //获取带"/"的项目名，如：/uimcardprj  
		   		var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1); 
		    	return(localhostPath+projectName+"/"); 
		   	}
		},
		/** yz-ajax通过方法  之 检查登录是否失效 **/
		logoutFn : function (resp){
			if(!this.isEmpty(resp) && resp =="logout"){
				this.alert({text:"登录失效,请重新登录!",succFn:function(){
					window.location.href = getRootPath()+"login.jsp";
				}});
			}
		},
		/** 将json字符串转换为json **/
		strToJson : function(strJson){
			return JSON.parse(strJson);
		},
		/** 将json串转换为json字符串 **/
		jsonToStr : function(jsonStr){
			return JSON.stringify(jsonStr);
		},
		/** 将json字符串赋值给指定form ,form:为formid字符串,jsonStr:为json的字符串形式 **/
		loadData : function (form,jsonStr){
		  var obj = FY.strToJson(jsonStr);
		  var key,value,tagName,type,arr;
		  for(x in obj){
		    key = x;
		    value = obj[x];
		    $(form).find("[name='"+key+"'],[name='"+key+"[]']").each(function(){
		    	tagName = $(this)[0].tagName;
		      	type = $(this).attr('type');
		      	if(tagName=='INPUT'){
		        	if(type=='radio'){
		         	$(this).attr('checked',$(this).val()==value);
		        }else if(type=='checkbox'){
		         	arr = value.split(',');
		          	for(var i =0;i<arr.length;i++){
		            	if($(this).val()==arr[i]){
		              		$(this).attr('checked',true);
		              		break;
		            	}
		          	}
		        }else{
		        	$(this).val(value);
		        }
		     }else if(tagName=='SELECT' || tagName=='TEXTAREA'){
		        	$(this).val(value);
		      }
		    });
		  	}
		},
		/** 用于在table列表中，选中指定数据行,参数：指定table对象和一个带id的list<map>集合 ,提示：table前提要指定UniqueId **/
		selectRecord : function ($tb,datas,field){
			var $trs = $tb.find("tbody tr"); 
			if(FY.isEmpty(field)){
				field = "id";
			}
			if(datas && datas.length == $trs.length){
				$tb.bootstrapTable("checkAll");
			}else{
				for(var i=0; i<datas.length; i++){
					var id = FY.getValueInObj(datas[i],field);
					$tb.bootstrapTable("checkBy",{"field":"id","values": [id]});
				}
			}
		},
		/** 获取对象中指定属性的值  **/
		getValueInObj : function(obj,key){
			var v = null;
			for(var k in obj){
				if(k == key){
					v = obj[k];
					break;
				}
			}
			return v;
		},
		/** 获取数组中匹配值的下标  **/
		getIdxInArr : function(arr,str){
			var idx = '';
			for(var i in arr){
				if(arr[i] == str){
					idx = i;
					break;
				}
			}
			return idx+1;
		},
		/** jstree 事件二次处理方法  **/
		treeEvent : function (e,data,event_str,fn){
			//处理不同的事件
			if(event_str == "change" || event_str == "select"){
				if(data){
					//获取到Node
					if(data.node && data.node.original){
						var ndata = data.node.original;					
						if(rv != ndata.id){
							rv = ndata.id;
							//触发事件
							if(fn)fn(ndata);
						}				
					}
				}
			}
			//jstree的click事件获取不到data
			else if(event_str == "click"){
				var eventNodeName = e.target.nodeName;               
	            if (eventNodeName == 'INS') {                   
	                return;               
	            } else if (eventNodeName == 'A') {  
	            	var resp={};
	                var $subject = $(e.target).parent();   
	                if ($subject.find('ul').length > 0) {   
	                	//表示父节点已展开
	                	//console.log($subject);
	                	//resp.text = $subject.find("#root_anchor").text();
	                	//resp.id = $subject.attr('id');
	                	//if(fn)fn(resp);                	
	                } else { 
	                  //选择的id值
	                	var $target = $(e.target);
	                	resp.text = $target.text();
	                	resp.id = $target.parents('li').attr('id');
	                	if(fn)fn(resp);
	                }               
	            }					
			}
			//jstree的dbclick事件获取不到data
			else if(event_str == "dblclick"){
				var eventNodeName = e.target.nodeName;               
	            if (eventNodeName == 'INS') {                   
	                return;               
	            } else if (eventNodeName == 'A') {  
	            	var resp={};
	                var $subject = $(e.target).parent();   
	                if ($subject.find('ul').length > 0) {   
	                	//表示父节点已展开
	                	//console.log($subject);
	                	//resp.text = $subject.find("#root_anchor").text();
	                	//resp.id = $subject.attr('id');
	                	//if(fn)fn(resp);                	
	                } else { 
	                  //选择的id值
	                	var $target = $(e.target);
	                	resp.text = $target.text();
	                	resp.id = $target.parents('li').attr('id');
	                	if(fn)fn(resp);
	                }               
	            }					
			}
			//jstree的dbclick事件获取不到data
			else if(event_str == "open" || event_str == "expand"){
				if(data){
					//获取到Node
					if(data.node && data.node.original){
						var ndata = data.node.original;					
						if(rv != ndata.id){
							rv = ndata.id;
							//触发事件
							if(fn)fn(ndata);
						}				
					}
				}
			}
		},
		/** yzAjax **/
		ajax : function(opts){
			var type = YZ.isEmpty(opts.type) ? "POST" : opts.type;
			var starTime = new Date().getTime();
			$.ajax({
				url : opts.url,
				type : type,
				data : opts.data,
				beforeSend : function(){
					if(opts.beforeFn)opts.beforeFn();
					if(YZ.isNotEmpty(opts.beforeMsg)){
						YZ.loading({text : opts.beforeMsg});
					}
				},
				success : function(resp){
					var endTime = new Date().getTime();
					/** 关闭所有layer层 **/
					if((endTime - starTime) > 2*1000){
						layer.closeAll('loading');
					}else{
						setTimeout(function(){
							layer.closeAll('loading');
						},1000);
					}
					/** 处理登录失效 **/
					if(YZ.isNotEmpty(resp) && resp == "logout"){
						YZ.confirm({msg : "登录失效,是否跳转重新登录?",succFn : function(){
							window.location.href = getRootPath()+"login.jsp";
						}})
					}else if(YZ.isNotEmpty(resp) && resp == "nopermission"){
						YZ.confirm({msg : "您没有该操作权限！"});
						return false;
					}else{
						if(resp.success){
							if(opts.succFn)opts.succFn(resp);
						}else{
							if(opts.errFn)opts.errFn(resp);
						}
					}
				},
				error : function(resp){
					var endTime = new Date().getTime();
					/** 关闭所有layer层 **/
					if((endTime - starTime) > 2*1000){
						layer.closeAll('loading');
					}else{
						setTimeout(function(){
							layer.closeAll('loading');
						},1000);
					}
					console.log("QUERST ERROR URL: [ "+opts.url+" ],RESPONSE: "+resp );
					YZ.alert({type : "error",msg : "请求失败!"});
				}
			});
		},
		/** yz.get **/
		get : function(opts){
			var starTime = new Date().getTime();
			var type = YZ.isEmpty(opts.type) ? "POST" : opts.type;
			$.ajax({
				url : opts.url,
				type : type,
				data : opts.data,
				beforeSend : function(){
					if(opts.beforeFn)opts.beforeFn();
					if(YZ.isNotEmpty(opts.beforeMsg)){
						YZ.loading({text : opts.beforeMsg});
					}
				},
				success : function(resp){
					var endTime = new Date().getTime();
					/** 关闭所有layer层 **/
					if((endTime - starTime) > 2*1000){
						layer.closeAll('loading');
					}else{
						setTimeout(function(){
							layer.closeAll('loading');
						},500);
					}
					/** 处理登录失效 **/
					if(YZ.isNotEmpty(resp) && resp == "logout"){
						YZ.confirm({msg : "登录失效,是否跳转重新登录?",succFn : function(){
							window.location.href = getRootPath()+"login.jsp";
						}})
					}else if(YZ.isNotEmpty(resp) && resp == "nopermission"){
						YZ.confirm({msg : "您没有该操作权限！"});
						return false;
					}else{
						if(opts.succFn)opts.succFn(resp);
						if(opts.errFn)opts.errFn(resp);
					}
				},
				error : function(resp){
					var endTime = new Date().getTime();
					/** 关闭所有layer层 **/
					if((endTime - starTime) > 2*1000){
						layer.closeAll('loading');
					}else{
						setTimeout(function(){
							layer.closeAll('loading');
						},500);
					}
					console.log("QUERST ERROR URL: [ "+opts.url+" ],RESPONSE: "+resp );
					YZ.alert({type : "error",msg : "请求失败!"});
				}
			});
		}
		
		
		
		
	};

 })();
